#include "NomNbrClasse.h"

#include <QtGui/QPushButton>
#include <QtGui/QSpinBox>
#include <QtGui/QLabel>
#include <QtGui/QLineEdit>
#include <QtGui/QGridLayout>
#include <QtGui/QApplication>
#include <QtGui/QGroupBox>

/** Constructeur par défaut.
 * Le nom peut être entré avec des caractères spéciaux (guillemets,
 * appostrophes, caractères accentués).
 *
 * Le nombre de classe varie entre 1 et 3. Il ne doit être utilisé que
 * si le PJ est un personnage multiclassé, pour un PJ à classe jumelée
 * il faut utiliser "Jumeler les classes" dans la fenêtre de démarrage
 * du programme principal.
 *
 * @param parent pointeur sur le widget parent (orphelin par défaut)
 */
NomNbrClasse::NomNbrClasse(QWidget* parent)
  : BaseUI( "NomNbrClasse", parent )
{
  groupe = new QGroupBox( trUtf8("Paramètres du personnage"), this );

  label = new QLabel( trUtf8("Nom du personnage"), this );

  label_2 = new QLabel( trUtf8("Nombre de classe(s)"), this );
  
  groupeLayout = new QGridLayout( groupe );

  nom = new QLineEdit(this);
  nom -> setFixedSize(150, 28);
  nom -> setToolTip( trUtf8("Entrer le nom du personnage") );

  spinBox = new QSpinBox(this);
  spinBox -> setMinimum(1);
  spinBox -> setMaximum(3);
  spinBox -> setToolTip( trUtf8("Laisser à 1, sauf pour les personnages multiclassés.\nLes personnages qui jumellent sont traités plus tard,\nlors de la progression.") );

  groupeLayout -> addWidget(label, 0, 0);
  groupeLayout -> addWidget(nom, 0, 1);
  groupeLayout -> addWidget(label_2, 1, 0);
  groupeLayout -> addWidget(spinBox, 1, 1);

  groupe -> setLayout( groupeLayout );

  fenetreLayout -> addWidget( groupe );

  boutons.push_back( new QPushButton( trUtf8("&Quitter"), this ) );
  boutons.back() -> setToolTip( trUtf8("Quitter le programme") );
  connect( boutons.back()  , SIGNAL( clicked() ), this, SLOT( annuler() ) );
  boutons.push_back( new QPushButton( trUtf8("&OK"), this ) );
  boutons.back() -> setToolTip( trUtf8("Accepter et continuer") );
  connect( boutons.back(), SIGNAL( clicked() ), this, SLOT( fermer() ) );

  setFenetreLayout();
}

/**
 * Destructeur, ne fait rien de spécial
 */
NomNbrClasse::~NomNbrClasse()
{}

/**
 * Permet l'entrée du nom du Joueur, ainsi que le nombre de classe(s)
 * initiale(s), un nouveau personnage allant jumeler ne doit entrer ici
 * que la première classe.
 *
 * @param nomPerso pointeur sur le nom.
 * @param nbrClasses pointeur sur le nombre de classe(s).
 * @return StatusCode \e true si entrée confirmée, \e false si
 * annulée, le nombre de classe est également renvoyé et accessible
 * avec la méthode valeur().
 */
StatusCode NomNbrClasse::demander(QString *nomPerso, unsigned int *nbrClasses)
{
  this -> show();

  qApp -> exec();

  *nomPerso   = nom -> displayText();
  *nbrClasses = spinBox -> value();

  return StatusCode(OK, spinBox -> value());
}
